class 颜色 {
    #值列表;
    constructor(r, g, b) {
        this.#值列表 = [r, g, b];
    }

    取红色() {
        return this.#值列表[0];
    }

    置红色(数值) {
        if (数值 < 0 || 数值 > 255) {
            throw new RangeError('无效的 R 值.');
        }
        this.#值列表[0] = 数值;
    }
}

let 红色 = new 颜色(255, 0, 0);
console.log(红色.取红色());
// console.log(红色.#值列表[0]);
try {
    红色.置红色(1000);
}
catch (e) {
    console.error(e.message);
}


console.log('-----\x1b[31m读取同类型其他实例的私有属性\x1b[0m------');

class 颜色类 {
    #值列表;
    constructor(r, g, b) {
        this.#值列表 = [r, g, b];
    }

    红色差(另一个) {
        return this.#值列表[0] - 另一个.#值列表[0];
    }
}

红色 = new 颜色类(255, 0, 0);
let 深红色 = new 颜色类(220, 20, 60);
console.log(红色.红色差(深红色));

// console.log('---------------------')

// 深红色 = new 颜色(220, 20, 60);
// console.log(红色.红色差(深红色));

console.log('---------------------------');
class 带透明度的颜色 extends 颜色 {
    #透明度;
    constructor(r, g, b, a) {
        super(r, g, b);
        this.#透明度 = a;
    }

    get 透明度() {
        return this.#透明度;
    }

    set 透明度(值) {
        if(值 < 0 || 值 > 1) {
            throw new RangeError('透明度必须在 0 与 1 之间');
        }
        this.#透明度 = 值;
    }
}

颜色 = new 带透明度的颜色(255, 0, 0, 0.5);
console.log(颜色.取红色());
console.log(颜色.透明度);
颜色.透明度 = 0.8;
console.log(颜色.透明度);